package com.atguigu.day18.mapsrc01;

import org.junit.Test;

import java.util.HashMap;

/*
HashMap储值原理
  一.why
        面试
        学以致用
  二.流程
       2.1 创建对象后底层成员变量变化
            负载因子0.75f
            底层数组 null
       2.2 添加数据
       2.2.1 首次添加 key 为null
                 底层数组长度为16
                 阈值是12
       2.2.2 非首次添加 指定位置没有值
                 直接插入
       2.2.3 非首次添加 指定位置有值   key 相同
                 喜新厌旧: 新的value 替换旧的value 并将旧的value返回
       2.2.4 非首次添加 指定位置有值 key 不相同 hash相同
                 七上八下: jdk7: 头插法
                          jdk8: 尾插法
       3.扩容 树化
          3.1 扩容
                 ++size > threshold
                 容量 和 阈值 变为原来的2倍
          3.2树化
                 某一个位置(桶)下节点数量>8
                 底层数组长度>=64

  三.测试





 */
public class MapTest {

    @Test
    public void test02() {
        HashMap<Student, Integer> map = new HashMap<>();
        map.put(null, 1);

        for (int i = 1; i <= 80; i += 2) {
            Student s = new Student("张三" + i, i);
            map.put(s,i);
        }

        for (int i = 2; i <= 20; i += 2) {
            Student s = new Student("李四" + i, i);
            map.put(s,i);
        }


    }


    @Test
    public void test01() {
        HashMap<String, String> map = new HashMap<>();

        map.put(null, "张三");

        map.put("射手", "鲁班");

        map.put("打野", "典韦");
     /*   String oldValue = map.put("射手", "后羿");
        System.out.println("oldValue = " + oldValue);
*/

    }

}
